/*
    后台开发用一些常用的通用型js
    基于jquery和easyui
 */

/**
 * 一个空函数而已，用来填参防止报错
 */
var emptyFn = function () {};

/**
 * 对后台抛出AJaxVo对象的JSON处理
 * @param ajaxData ajax访问得到的【data】json对象
 * @returns {null} 如果后台抛出BusinessException，则弹窗提示错误信息，并返回null,如果访问正常，则返回正常数据
 */
function getAjaxReturnData(ajaxData) {
    if(ajaxData.error == 1){
        $.messager.alert('Error!', ajaxData.errorMsg, 'error', function () {});
        return null;
    }else{
        return ajaxData.data;
    }
}

/**
 * 初始化并打开一个easyui的dialog
 * @param domId 页面dom元素的id
 * @param title dialog的标题
 * @param openFn 打开后执行的函数
 * @param params 打开后执行函数的参数
 * @param beforeOpenFn 打开前执行的函数  --返回false可以阻止打开dialog
 * @param params2 打开前执行的函数的参数
 */
function openOrInitDialog(domId,title,openFn,params,beforeOpenFn,params2){
    if(typeof beforeOpenFn  == 'function'){
        var flag = beforeOpenFn(params2);
        if(flag == false){
            return;
        }
    }
    var dialogInited = $('#'+domId).attr('dialogInited');
    if(dialogInited == "true"){
        $('#'+domId).dialog('open');
        return;
    }
    $('#'+domId).dialog({
        title:title
        ,modal:true
        ,cache:false
        ,closed:false
        ,onOpen:function () {
            if(typeof openFn == 'function'){
                openFn(params);
            }
        }
    });
    $('#'+domId).attr('dialogInited',"true");
}

function closeDialog(domId,closeFn,params,beforeCloseFn,params2){
    if(typeof beforeCloseFn  == 'function'){
        var flag = beforeCloseFn(params2);
        if(flag == false){
            return;
        }
    }

    $('#'+domId).dialog('close');

    if(typeof closeFn  == 'function'){
        closeFn(params);
    }
}

/**
 * 针对后端对于时间类JSON对象的格式化
 * @param jsonTime
 * @returns {string}
 */
function formatterJSONTime(jsonTime){
    return jsonTime.year+'-'+jsonTime.month+'-'+jsonTime.day+' '+jsonTime.hours+':'+jsonTime.minutes+':'+jsonTime.seconds;
}

/**
 * 通过formid来获取form表单中所有需要提交元素的值（返回JSON对象）
 * @param FormId
 * @returns {{}}
 */
function getJSONFormData(FormId){
    var keys = $('#'+FormId).serializeArray();
    var param = {};
    $.each(keys,function(index,key){
        param[key.name] = key.value;
    });
    return param;
}

/**
 * 用来简易判断一个对象是否为空的方法
 * @param data
 * @returns {boolean}
 */
function isBlank(data){
    var type = $.type(data);
    if( type === "undefined" || type === "null"){
        return true;
    }
    if(type === "string" && data == ""){
        return true;
    }
    if(type === "object" && $.isEmptyObject(data)){
        return true;
    }
    return false;
}

function tmsAjax(ajaxParam){
    if(isBlank(ajaxParam) || $.isEmptyObject(ajaxParam)){return;}
    $.ajax({
        url:ajaxParam.url
        ,type:ajaxParam.type
        ,data:ajaxParam.data
        ,contentType:isBlank(ajaxParam.contentType)?'application/json':ajaxParam.contentType
        ,dataType:'json'
        ,async:isBlank(ajaxParam.async)?true:ajaxParam.async
        ,success:function (ajaxData) {
            var data = getAjaxReturnData(ajaxData);
            if(isBoolean(ajaxParam.isResultState)?ajaxParam.isResultState:false){
                if(data == 'success'){easyuiAlert("操作成功！","info");}
                else if(data == "error"){easyuiAlert("操作失败!","error");}
                else{easyuiAlert(data,"warning");}
            }
            if(!isBlank(data)){
                if(typeof ajaxParam.success == 'function'){
                    ajaxParam.success(data);
                }
            }else{
                if(typeof ajaxParam.error == 'function'){
                    ajaxParam.error();
                }
            }
        }
        ,error:function () {
            easyuiAlert('系统错误！请联系管理员。','error');
        }
    });
}

function isJSONString(text){
    if(!isString(text)){return false;}
    if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
        replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
        replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
        return true;
    }else{
        return false;
    }
}

function easyuiAlert(msg,icon){
    //error,info,warning。
    var title={'error': '错误！','info':'信息','warning':'警告'};
    $.messager.alert(title[icon],msg,icon,emptyFn());
}

function isString(object){
    return Object.prototype.toString.call(object) === "[object String]";
}

function isNumber(object){
    return Object.prototype.toString.call(object) === "[object Number]";
}

function isBoolean(object){
    return $.type(object) === "boolean";
}